<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet"
        href="https://cdn.cnbj1.fds.api.mi-img.com/mi.com-assets/shop/pro/css/buy/cart2.382798e6.css">
    <link rel="stylesheet" href="../css/reset.css">
    <script src="../js/vue.js"></script>
    <style>
        /* span的默认样式 */
        .lw-checkbox {
            user-select: none;
            display: inline-block;
        }

        .lw-checkbox label span {
            display: inline-block;
            vertical-align: middle;
            width: 20px;
            height: 20px;
            border-radius: 2px;
            border: 1px solid #757575;
            color: #fff;
            text-align: center;
            line-height: 20px;

        }

        .lw-checkbox label span:hover {
            color: #757575;
        }

        /* 当checkbox处于选中状态 span的样式 */
        .lw-checkbox label input[type='checkbox']:checked+span {
            background-color: #ff6700;
            border-color: #ff6700;
            color: #fff;
        }

        .content {
            font-style: normal;
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- <div>
            <i class='iconfont home'>主页</i>
        </div> -->
        <!-- <lw-checkbox v-model="flag"></lw-checkbox> -->
        <!-- <lw-checkbox v-model="flag" label="是否记住用户名?"></lw-checkbox> -->

        <!-- 父组件给子组件传入html结构,通过属性传 (传参麻烦, 不允许换行) -->
        <!-- <lw-checkbox v-model="flag" label="<i class='iconfont home'>主页</i>"></lw-checkbox> -->


        <!-- 
            插槽:  Vue 实现了一套内容分发的 API 
            
            如何使用插槽?   父组件传, 子组件收
            1. 父组件传  => 父组件在使用子组件时,在子组件的标签对内传入文本或html结构
            2. 子组件收  => 子组件使用<slot></slot>标签,作为内容分发的出口 => 将内容输出到指定位置

            可以理解为 <slot></slot>标签就是一个占位符,  当子组件渲染时, slot标签会被替换为传入的内容

            后备内容:
            1. 如果父组件没有给子组件传入分发内容(插槽内容),子组件将默认使用<slot></slot>标签对中的内容作为后备内容
           
        -->
        <!-- <lw-checkbox v-model="flag">
            <i class='iconfont home'>主页</i>
        </lw-checkbox> -->
        <!-- <lw-checkbox v-model="flag">
            1111111
        </lw-checkbox> -->
        <lw-checkbox v-model="flag" label="是否记住用户名?"></lw-checkbox>
        <p>
            flag:{{flag}}
        </p>
    </div>
</body>
<script>

    Vue.component("lw-checkbox", {
        model: {
            prop: "checked",
            event: "update:checked",
        },
        props: {
            checked: {
                type: Boolean,
                default: false,
            },
            label: {
                type: String,
                default: "",
            }
        },
        data() {
            return {

            }
        },

        // 1. 优先使用插槽内容 2. 没有插槽内容的话,可以使用label属性作为后备内容
        template: `<div class="lw-checkbox">
            <label>
                <input hidden type="checkbox" :checked="checked" @change="$emit('update:checked',$event.target.checked)">
                <span class="iconfont">√</span>
                <i class="content">
                    <slot>{{label}}</slot>
                </i>
            </label>
        </div>`,
        mounted() {
            console.log("组件实例", this);
        },
    })


    var app = new Vue({
        el: "#app",
        data: {
            flag: false,
        },
        methods: {
            updateCheckedHandler(v) {
                this.flag = v;
            }
        },
    })

</script>

</html>